package com.note.feng.leetcode.algorithms.easy.four;

import java.util.HashSet;
import java.util.Set;

public class FourHundredFourteen {

    /**
     * 412 第三大的数
     * 给你一个非空数组，返回此数组中 第三大的数 。如果不存在，则返回数组中最大的数。
     *
     * 示例 1：
     *
     * 输入：[3, 2, 1]
     * 输出：1
     * 解释：第三大的数是 1 。
     * 示例 2：
     *
     * 输入：[1, 2]
     * 输出：2
     * 解释：第三大的数不存在, 所以返回最大的数 2 。
     * 示例 3：
     *
     * 输入：[2, 2, 3, 1]
     * 输出：1
     * 解释：注意，要求返回第三大的数，是指在所有不同数字中排第三大的数。
     * 此例中存在两个值为 2 的数，它们都排第二。在所有不同数字中排第三大的数为 1 。
     *
     * 提示：
     *
     * 1 <= nums.length <= 104
     * -231 <= nums[i] <= 231 - 1
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/third-maximum-number
     */
    /**
     *解法：
     * 声明3个变量，分别表示最大值、次大值和第三大值，初始值为null,遍历数组：
     * 1、若当前值大于最大值或者最大值为null：第三大值=次大值，次大值=最大值，最大值=当前值；
     * 2、若当前值大于次大值或者次大值为null，并且当前值小于最大值：第三大值=次大值，次大值=当前值；
     * 3、若当前值大于第三大值或者第三大值为null，并且次大值不为null并且次大值大于当前值：第三大值=当前值
     * 遍历结束，若第三大值为null，说明没有第三大值，返回最大值，否则返回第三大值
     * @param nums
     * @return
     */
    public int thirdMax(int[] nums) {
        Integer oneMax = null;
        Integer twoMax = null;
        Integer threeMax = null;
        for (int num : nums){
            if(oneMax == null || oneMax < num){
                threeMax = twoMax;
                twoMax = oneMax;
                oneMax = num;
            }else if((twoMax == null || twoMax < num) && oneMax > num){
                threeMax = twoMax;
                twoMax = num;
            }else if((threeMax == null || threeMax < num) && twoMax != null && twoMax > num){
                threeMax = num;
            }
        }
        return threeMax == null ? oneMax : threeMax;
    }

    public static void main(String[] args) {
//        FourHundredFourteen t = new FourHundredFourteen();
//        int [] nums = new int[]{3,3,4};
//        System.out.println(t.thirdMax(nums));
        String filePath = "abcdfghpdf";
        System.out.println(filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length()));
    }
}
